/* Бинарные операции &=, |= и ^=, как операции накладывания маски */

unsigned char x=0b00111100;	// Объявляем и инициализируем символьные 
unsigned char y=0b00111100;	// (байтовые) переменные x,y и z		 
unsigned char z=0b00111100; 	//

/* Наложим на эти числа маску 0b00001111 */

x&=0b00001111; 	
/* При накладывании маски операцией &= в тех разрядах, где в маске стоит
   значение 0, биты исходного числа принимают значение 0, не зависимо от 
   первоначального значения. В тех разрядах, где в маске стоит значение 1,
   биты исходного числа не изменяются
   Таким образом, в результате x=0b00001100 */
 
y|=0b00001111;
/* При накладывании маски операцией |= в тех разрядах, где в маске стоит
   значение 1, биты исходного числа принимают значение 1, не зависимо от 
   первоначального значения. В тех разрядах, где в маске стоит значение 0,
   биты исходного числа не изменяются
   Таким образом, в результате y=0b00111111 */

z^=0b00001111;
/* При накладывании маски операцией ^= в тех разрядах, где в маске стоит
   значение 1, биты исходного числа принимают значение, противоположное
   первоначальному, т.е. если был 0, то станет 1, если была 1, то станет 0.
   В тех разрядах, где в маске стоит значение 0, биты исходного числа 
   не изменяются
   Таким образом, в результате z=0b00110011 */
